// 导入路由
const router = require("express").Router();
// 导入用户类
const User = require("../model/userModel");
// 导入jwt模块 （jsonwebtoken）
const Jwt = require("../common/token/jwt");
const upload = require('../common/uploadFile/index')
// 创建用户类的实例
const userModel = new User();

// 注册接口
// 地址： /api/user/register
// 方式： POST
// 参数： account, password
// 响应数据格式： json格式
// 示例： http://localhost:4000/api/user/register
router.post("/register", async (req, res) => {
  // 接收前端提交的表单信息
  let { account, password } = req.body;
  // 判断这些参数是否有值
  if (account == undefined || password == undefined) {
    // 缺少值
    res.send({
      code: 4004,
      msg: "缺少参数，请重新提交",
    });
  } else {
    // 有值
    await userModel.register(account, password).then(
      (data) => {
        // 把注册的结果响应给前端
        res.send(data);
      },
      (err) => {
        // 发生了错误
        res.send(err);
      }
    );
  }
});

// 登录接口
// 地址： /api/user/login
// 方式： POST
// 参数： account, password
// 响应数据格式： json格式
// 示例： http://localhost:4000/api/user/login
router.post("/login", async (req, res) => {
  let { account, password } = req.body;
  if (account == undefined || password == undefined) {
    // 缺少值
    res.send({
      code: -1,
      msg: "缺少参数，请重新提交",
    });
  } else {
    // 调用用户类登录方法
    userModel.login(account, password).then(
      (data) => {
        // 把登录的结果响应给前端
        // 处理token（用户临时身份）
        let id = data.id;
        let token = new Jwt(id).getToken();
        if (data.code == 200) {
          // 登录成功才有token
          res.send({
            code: data.code,
            msg: data.msg,
            token,
          });
        } else {
          // 登录失败
          res.send(data);
        }
      },
      (err) => {
        // 发生了错误
        res.send(err);
      }
    );
  }
});

// 登录接口(管理员)
// 地址： /api/user/signin
// 方式： POST
// 参数： account, password,role
// 响应数据格式： json格式
// 示例： http://localhost:4000/api/user/signin
router.post("/signin", async (req, res) => {
  let { account, password, role } = req.body;
  // console.log({ account, password , role});
  if (account == undefined || password == undefined || role == undefined) {
    // 缺少值
    res.send({
      code: -1,
      msg: "缺少参数登录，请重新提交",
    });
  } else {
    // 调用用户类登录方法
    userModel.signin(account, password, role).then(
      (data) => {
        // 把登录的结果响应给前端
        // 处理token（用户临时身份）
        let id = data.id;
        let token = new Jwt(id).getToken();
        if (data.code == 200) {
          // 登录成功才有token
          res.send({
            code: data.code,
            msg: data.msg,
            nickName: data.nickName,
            token,
          });
        } else {
          // 登录失败
          res.send(data);
        }
      },
      (err) => {
        // 发生了错误
        res.send(err);
      }
    );
  }
});

// 获取用户列表接口
// 地址： /api/user/list
// 方式： GET
// 参数： page, pageSize
// 响应数据格式： json格式
// 示例： http://localhost:4000/api/user/list
router.get("/list", async (req, res) => {
  let { page, pageSize } = req.query;
  if (page == undefined || pageSize == undefined) {
    res.send({
      code: -1,
      msg: "缺少参数",
    });
  } else {
    await userModel.list(page, pageSize).then(
      (content) => {
        // 把获取的结果响应给前端
        res.send(content);
      },
      (err) => {
        // 把失败的结果响应给前端
        res.send(err);
      }
    );
  }
});

// 设置用户头像接口
// 地址： /api/user/img
// 方式： POST
// 参数： account, imgUrl
// 响应数据格式： json格式
// 示例： http://localhost:4000/api/user/img
router.post("/img", upload.single('img'), async (req, res) => {
  let token = req.body.token || req.headers.token;
  let imgUrl = `/static/imgs/${req.file.filename}`; // 从上传的文件中获取图片 URL
  console.log(imgUrl)
  if (token && imgUrl) {
      let result = new Jwt(token).verifyToken();
      console.log(result);
      if (result.code == 200) {
          let account = req.body.account;
          await userModel.img1(account, imgUrl).then(
              (content) => {
                  res.send(content);
              },
              (err) => {
                  res.send(err);
              }
          );
      } else {
          res.send({
              code: -1,
              msg: "登录已经失效了，请重新登录",
          });
      }
  } else {
      res.send({
          code: -1,
          msg: "缺少参数",
      });
  }
});

// 修改昵称
// 地址：http://127.0.0.1:4000/api/user/name
// 请求：POST (不可以在浏览器地址栏测试)
// 参数：accout text 
// 示例：http://127.0.0.1:4000/api/user/name
// 响应数据格式: json格式
router.post('/name', async (req,res)=> {
    // 接收前端提交的参数
    let {account, text} = req.body;
    // 判断参数是否有值
    if(account == undefined || text == undefined) {
        res.send({
            code: -1,
            msg: "缺少参数，请检查在提交"
        })
    }
    else {
        await userModel.updatename(account,text)
        .then(
            data=> {
                res.send(data)
            },
            err=> {
                res.send(err);
            }
        )
    }
})

// 删除账号接口
// 地址： /api/user/remove
// 方式： POST
// 参数： token
// 响应数据格式： json格式
// 示例： http://localhost:4000/api/user/remove
router.post('/remove', async (req,res)=> {
  // 获取用户的临时身份
  let token = req.body.token || req.headers.token;
  if(token){
      let result = new Jwt(token).verifyToken();
      if(result.code == 200) {
          // 获取用户id
          let account = req.body.account;
          // 删除账号
          await  userModel.remove(account)
          .then(
              content=>{
                  // 把删除的结果响应给前端
                  res.send(content)
              },
              err=> {
                  // 发送异常
                  res.send(err)
              }
          )
      }
      else {
          res.send({
              code: -1,
              msg: "登录已经失效了，请重新登录"
          })
      }
      
  }
  else {
      res.send({
          code: -1,
          msg: "缺少参数"
      })
  }
})

// photo_list
// 图片列表
// 地址：/api/photo/photo_list
// 方式：GET
// 参数：
// 响应数据格式: json格式
// 示例： http://localhost:4000/api/user/photo_list
router.get('/photo_list', async (req, res) => {
  // console.log(req.body)
  await userModel.photo_list()
      .then(
          data => {
              // 响应数据给前端
              res.send(data)
          },
          err => {
              res.send(err);
          }
      )
})

// Alluser
// 所有用户列表
// 地址：/api/photo/photo_list
// 方式：GET
// 参数：
// 响应数据格式: json格式
// 示例： http://localhost:4000/api/user/alluser
router.get('/alluser', async (req, res) => {
  // console.log(req.body)
  await userModel.AllList()
      .then(
          data => {
              // 响应数据给前端
              res.send(data)
          },
          err => {
              res.send(err);
          }
      )
})

module.exports = router;
